#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>


// waitpid方法示例
int main() 
{
    pid_t id = fork();
    if (id == 0) 
    {
        // 子进程：打印5次后退出
        int cnt = 5;
        while (cnt) 
        {
            printf("我是一个子进程, pid : %d, ppid : %d\n", getpid(), getppid());
            sleep(1);
            cnt--;
        }
        exit(0); // 子进程正常退出
    }
    sleep(10); // 父进程休眠10秒，确保子进程运行
    // 父进程：阻塞等待指定子进程（id > 0）
    pid_t rid = waitpid(id, NULL, 0); // options=0表示阻塞
    if (rid > 0) 
    {
        printf("wait success rid: %d\n", rid); // 成功回收
    }
    sleep(10); // 父进程继续执行
    return 0;
}









// wait方法示例
//int main() 
//{
//    pid_t id = fork();  // 创建子进程
//    if (id == 0)        // 子进程执行分支
//    {
//        // child
//        int cnt = 5;
//        while (cnt)     // 子进程循环5次
//        {
//            printf("我是一个子进程, pid : %d, ppid : %d\n", getpid(), getppid());
//            sleep(1);   // 每秒打印一次
//            cnt--;
//        }
//        exit(0);        // 子进程正常退出，返回状态码0
//    }
//    sleep(10);          // 父进程休眠10秒
//    // father
//    pid_t rid = wait(NULL);  // 阻塞等待任意子进程终止，不关心退出状态
//    if (rid > 0)        // 等待成功
//    {
//        printf("wait success rid: %d\n", rid);  // 输出被回收的子进程PID
//    }
//    sleep(10);          // 父进程继续休眠10秒（观察进程状态）
//    return 0;
//}
//
